package cn.classg.redisson.factory;

import cn.classg.redisson.enums.ServerPattern;
import java.util.HashMap;
import java.util.Map;

/**
 * Redis服务模式工厂类
 * @author CLASSG
 */
public class ServerPatternFactory {

    private static final Map<String, ServerPattern> serverPatternMap = new HashMap<>();

    // 策略模式缓存分布式锁服务模式
    static {
        serverPatternMap.put(ServerPattern.SINGLE.getPattern(), ServerPattern.SINGLE);
        serverPatternMap.put(ServerPattern.CLUSTER.getPattern(), ServerPattern.CLUSTER);
        serverPatternMap.put(ServerPattern.MASTER_SLAVE.getPattern(), ServerPattern.MASTER_SLAVE);
        serverPatternMap.put(ServerPattern.REPLICATED.getPattern(), ServerPattern.REPLICATED);
        serverPatternMap.put(ServerPattern.SENTINEL.getPattern(), ServerPattern.SENTINEL);
    }

    /**
     * 根据字符串模式标识返回服务器模式枚举类
     *
     * @param pattern pattern
     * @return ServerPattern
     */
    public static ServerPattern getServerPattern(String pattern) throws RuntimeException {
        ServerPattern serverPattern = serverPatternMap.get(pattern);
        if (serverPattern == null) {
            throw new RuntimeException("没有找到相应的服务器模式,请检测参数是否正常,pattern的值为:" + pattern);
        }
        return serverPattern;
    }
}